package org.dtrd.modules.patient.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dtrd.modules.patient.entity.bean.report.*;
import org.dtrd.modules.patient.entity.po.DtrdEntRdReport;

import java.util.Date;
import java.util.List;

/**
 * <p>
 * 患者报告服务类
 * </p>
 *
 * @author QR
 * @since 2022-01-22
 */
public interface IDtrdEntRdReportService extends IService<DtrdEntRdReport> {

    /**
     * 校验报告id的有效性
     */
    boolean isValidReportId(Integer reportId);

    /**
     * 生成患者首诊报告
     * @param patientId 患者id
     * @param username
     * @return 报告对象
     */
    ReportFirst createReportFirst(Integer patientId, String username);
    ReportFirst createReportFirstV2(Integer patientId, String username);

    /**
     * 生成患者周报
     */
    ReportWeek createReportWeek(Integer patientId, String reportName);

    /**
     * 生成患者月报
     * @param patientId
     * @param reportName
     * @return
     */
    ReportMonth createReportMonth(Integer patientId, String reportName);

    /**
     * 生成总结报告
     */
    ReportSummary createReportSummary(Integer patientId, String username);

    /**
     * 分页获取报告内容
     */
    IPage<ReportListInfo> pageReport(ReportPageRequest request);

    /**
     * 获取患者周报详情
     */
    ReportWeek getWeeklyReport(Integer dataId);

    /**
     * 获取患者月报详情
     */
    ReportMonth getMonthReport(Integer dataId);

    /**
     * 获取需要生成周报/月报的patientId
     */
    List<Integer> getValidPatientIds();

    /**
     * 获取首诊报告或总结报告
     */
    ReportFirst getPatientFirstReport(Integer patientId, Integer type);

    /**
     * 获取总结报告
     */
    ReportSummary getPatientSummaryReport(Integer patientId);

    boolean removeReport(Integer dataId);

    /**
     * 获取患者报告首页内容
     */
    PatientReportIndex getPatientReportIndex(Integer patientId, Date queryDateWeek, Date queryDateMonth);

    /**
     * 更新报告内容
     */
    boolean updateReportContent(ReportSummaryUpdateRequest request, String name);

    /**
     * 更新首诊报告内容
     */
    boolean updateFirstReportContent(ReportFirstUpdateRequest request, String name);

    /**
     * 更新周报的输入内容
     * @param request
     * @param name
     * @return
     */
    boolean updateWeekReportContent(ReportWeekUpdateRequest request, String name);

    /**
     * 更新月报的输入内容
     * @param request
     * @param name
     * @return
     */
    boolean updateMonthReportContent(ReportMonthUpdateRequest request, String name);

    /**
     * 更新总结报告输入内容
     *
     * @param request
     * @param name
     * @return
     */
    boolean updateSummaryReportContent(ReportSummaryUpdateRequest request, String name);
    /**
     * 获取日常监测-人体成分分析、患者档案-体格检查、实验室检测、影像学检测上传的报告单
     */
    String getPatientArchiveUploadedReport(Integer patientId);
}
